$(document).ready(function() {
    const $usernamemsg = $('#usernamemsg');
    const $userid = $('#firstname');
    const $msg = $('#msg');

    const $repeatedmsg = $('#repeatedmsg');
    const $repeatedText = $('#repeatedText');
    const $repeatedPassword = $('#newPassword1');
    const $password = $('#newPassword');


    // 隐藏初始消息
    $usernamemsg.hide();
    $repeatedmsg.hide();

    //处理重复的密码
    $repeatedPassword.on('blur', function() {
        const inputPassword = $password.val();
        const repeatedPassword = $repeatedPassword.val();

        if (inputPassword !== '') {
            if (repeatedPassword === '') {
                $repeatedmsg.show();
                $repeatedText.show().text("please repeat the password!");
            } else if (repeatedPassword !== inputPassword) {
                $repeatedmsg.show();
                $repeatedText.show().text("different!");
            } else {
                $repeatedmsg.hide();
                $repeatedText.hide();
            }
        } else {
            $repeatedmsg.hide();
            $repeatedText.hide();
        }
    });

    // 处理用户名的验证
    $userid.on('blur', function() {
        const username = $userid.val(); // 用变量存储用户输入的用户名
        if (username === '') {
            $msg.hide();
            $usernamemsg.hide();
            return;
        }

        // 调用 validateUsername 函数并处理 Promise
        validateUsername(username).then(function(result) {
            if (result !== UsernameValidationResult.VALID) {
                $msg.text(result).show();
                $usernamemsg.show();
            } else {
                $msg.text('').hide();
                $usernamemsg.hide();
            }
        });
    });

});

// 用户名验证常量
const UsernameValidationResult = {
    VALID: 0,
    INVALID_LENGTH: 'The length should be between 3 and 20!',
    INVALID_CHARACTERS: 'Username contains invalid characters!',
    INVALID_START: "You shouldn't begin with a digit!",
    INCALID_REPEATED: 'The username already exists!'
};

// 检查用户名是否有效
function validateUsername(username) {
    const minLength = 3;   // 最小长度
    const maxLength = 20;  // 最大长度
    const validChars = /^[a-zA-Z0-9_-]+$/; // 允许的字符范围

    // 检查长度
    if (username.length < minLength || username.length > maxLength) {
        return Promise.resolve(UsernameValidationResult.INVALID_LENGTH); // 无效长度
    }

    // 检查字符集
    if (!validChars.test(username)) {
        return Promise.resolve(UsernameValidationResult.INVALID_CHARACTERS); // 包含无效字符
    }

    // 检查开头字符（希望不允许以数字开头）
    if (/^[0-9]/.test(username[0])) {
        return Promise.resolve(UsernameValidationResult.INVALID_START); // 不能以数字开始
    }

    // 发起 AJAX 请求检查用户名是否存在
    return $.ajax({
        type: 'GET',
        url: 'http://localhost:8080/csu_javaweb_group_assignment/usernameExist?newname=' + username,
        dataType: 'json' // 确保我们期望 JSON 格式的响应
    }).then(function(data) {
        // 根据 AJAX 请求返回结果决定返回值
        if (data.success) {
            return Promise.resolve(UsernameValidationResult.INCALID_REPEATED); // 用户名已存在
        }
        return Promise.resolve(UsernameValidationResult.VALID); // 用户名有效
    }).catch(function(err) {
        console.error(err);
        return Promise.resolve(UsernameValidationResult.INVALID_CHARACTERS); // 处理错误的时候可以返回一个提示
    });
}